package com.clei.netty.file.client;

import com.clei.consts.NettyConstants;
import com.clei.netty.file.dto.MsgBody;
import com.clei.netty.file.enums.FileCmdTypeEnum;
import io.netty.channel.Channel;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 消息发送者
 *
 * @author Y
 * @date 2022-04-21
 */
public class MsgSender {

    /**
     * 序号计数器
     */
    private static final AtomicInteger SEQ_COUNTER = new AtomicInteger();

    /**
     * 连接频道
     */
    private Channel channel;

    /**
     * 发送消息
     *
     * @param cmd 命令类型
     */
    public void sendMsg(byte cmd) {
        sendMsg(0, cmd, NettyConstants.EMPTY);
    }

    /**
     * 发送消息
     *
     * @param cmd  命令类型
     * @param data 数据
     */
    public void sendMsg(byte cmd, byte[] data) {
        sendMsg(0, cmd, data);
    }

    /**
     * 发送消息
     *
     * @param ack  回应 对应序号 从1开始
     * @param cmd  命令类型
     * @param data 数据
     * @see FileCmdTypeEnum
     */
    public void sendMsg(int ack, byte cmd, byte[] data) {
        channel.writeAndFlush(new MsgBody(SEQ_COUNTER.incrementAndGet(), ack, cmd, data));
    }

    public void setChannel(Channel channel) {
        this.channel = channel;
    }
}
